

const publicConfig = {
  /** 设置容错标准时间 单位:ms */
  AllowableErrorTime: 300,
  /** 离开清除标准时间 单位:ms */
  LeveStandardTime: 2000,
}

const getRfidValidJudgment = (callback) => {


  const rfidInfo = {
    values: {},
  };


  const timers = {}
  // 存储置空的定时器
  const clearValueTimers = {}

  // 写入 RFID 相关的信息
  const onSetRfidData = async (config) => {
    // console.log('config',config)
    const { rfid, key } = config

    // 进入,设置值,设置清除时间
    // 更新,容错时间后, 设置旧的为空,重新设置清除时间,设置新值
    // 重复扫描到数据,更新清除时间

    // 如果为新增
    const oldRfid = rfidInfo.values[key]

    // 设置新的值
    rfidInfo.values[key] = rfid;


    if (!oldRfid && rfid) {
      // 设置值
      onSetRfidValueHandler()
    }
    // 更新
    else if (oldRfid && oldRfid !== rfid) {
      // 设置值
      // 首先,更换防止误扫描,设置容错信息
      // 如果存在定时器,则先清除
      clearTimeout(timers[key])
      // 重新设置定时器
      timers[key] = setTimeout(onSetRfidValueHandler, publicConfig.AllowableErrorTime);
    }
    // 扫描到重复的
    else if (oldRfid && oldRfid === rfid) {
      // 重新设置清除时间
      onResetRfidTimeout()
    }


    // 设置 RFID 后,创建定时器,如果指定时间内(800ms) 没收到RFID, 则清除数据
    function onResetRfidTimeout() {
      clearTimeout(clearValueTimers[key])
      clearValueTimers[key] = setTimeout(() => {
        const newRfid = ""
        rfidInfo.values[key] = newRfid;
        callback({
          ...config,
          rfid: newRfid,
        });
      }, publicConfig.LeveStandardTime);
    }

    /**
     * 设置值
     */
    function onSetRfidValueHandler() {
      // 重新设置值
      callback(config)
      // 清空旧的
      onResetRfidTimeout()
    }

  };


  return {
    onSetRfidData,
  }

}


module.exports = {
  getRfidValidJudgment
}